﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;
using DynaSpace.Entity;
using DynaSpace.Menu;
using System.Reflection;
using System.IO;

namespace DynaSpace
{

	/// <summary>
	/// Hlavní herní třída DynaSpace
	/// </summary>
	public sealed partial class DynaGame : Microsoft.Xna.Framework.Game
	{
		/// <summary>
		/// Konstruktor hlaví herní třídy <see cref="DynaGame"/>
		/// </summary>
		public DynaGame()
		{
			DynaGame.game = this;
			graphics = new GraphicsDeviceManager(this);

			// seznam menu
			menus = new MenuContainerCollection();

			// nacitat obsah budeme pomoci noveho contentmanageru
			this.Content = new DynaContentManager(this.Content.ServiceProvider);
			
			// defaultni adresar obsahu (podslozka Content od teto assembly)
			(this.Content as DynaContentManager).DefaultRootDirectory = "Content";
		}

		/// <summary>
		/// Při načítání obsahu
		/// </summary>
		protected override void LoadContent()
		{
			// nastavit odkaz do složky Content (nenastavit žádnou, bude použita defaultní z Content)
			(Content as DynaContentManager).RootDirectory = "";

			// vytvořit vykreslovací spritebatch
			spriteBatch = new SpriteBatch(GraphicsDevice);

			// hlavní pohled na hrací plochu
			defaultViewport = GraphicsDevice.Viewport;
		}

		/// <summary>
		/// Updatuje stav hry
		/// </summary>
		/// <param name="gameTime">Ćas hry</param>
		protected override void Update(GameTime gameTime)
		{
			UpdateKeyboard(); // update stisknutých kláves

			if(p != null)
				p.OnUpdate(gameTime); // update entit
			
			// výpočet FPS
			lastFpsCounter++;
			if ((DateTime.Now - lastFpsCheck).TotalSeconds > 2)
			{
				fps = (float)Math.Round(((double)lastFpsCounter) / (DateTime.Now - lastFpsCheck).TotalSeconds, 2);
				lastFpsCheck = DateTime.Now;
				lastFpsCounter = 0;
			}

			base.Update(gameTime);
		}

		/// <summary>
		/// Vykreslí ovládací prvek
		/// </summary>
		/// <param name="gameTime">Čas hry</param>
		protected override void Draw(GameTime gameTime)
		{
			// nastavít počáteční viewport
			GraphicsDevice.Viewport = defaultViewport;
			// smazat plochu
			GraphicsDevice.Clear(backGroundColor);
			
			base.Draw(gameTime);
		}
	}
}
